"""
@name : python基础练习
@author : zhangjian
@projectname: tlbb
"""
#1、输入数字n，输出n天前的日期（time或者datatime模块）
# import time
# n=float(input("输入数字n"))
# print(f"{n}天前的日期为：{time.asctime(time.localtime(time.time()-n*86400))}")

#2、输出指定文件夹下有哪些文件或文件夹（实现ls命令， os）
# import os
# dirname=input("输入文件夹名：")
# for file in os.listdir(dirname):
#     if os.path.isdir(os.path.join(dirname,file)):
#         print('*'+file)
#     else:
#         print(file)

#3、列表去重，并且从小到大排序
# lst=[1,1,2,2,3,2,1]
# lst=set(lst)
# lst=list(lst)
# lst.sort()
# print(lst)

#4、如何在一个函数内部修改全局变量
# def f():
#     global x
#     x=8
# x=1
# f()
# print(x)

#6、python的基本数据类型有哪些？
# python基本数据类型int、float、str、bool、Decimal、complex

#7、python中生成随机整数（1-10），随机小数（1-10），随机小数（0-1）的方法
# import random
# print("生成一个1-10的随机整数",random.randint(1,10))
# print("生成一个1-10的随机小数数",random.uniform(1,10))
# print("生成一个0-1的随机小数数",random.random())

#8、python中哪些是可变数据类型，哪些是不可变数据类型
# 可变：list、bool、float、dict、set
# 不可变：str、int、date、bool、tuple
# s={1,2,3}
# print(id(s))
# s.update({4,5})
# print(s)
# print(id(s))

#9、a+=1与a=a+1有什么区别
# 对于可变对象，a+=1直接在原内存地址上操作；a=a+1开辟新的内存操作
# 对于不可变对象，a+=1和a=a+1都是在新开辟的空间操作

#10、什么是pep8？说出5点它的标准
#import this
# 使用4个空格缩进，不要使用制表符
# 每行不超过79个字符
# 用空行分隔函数和类，已经函数内的大块代码
# 尽量注释独占一行
# 运算符周围和逗号后面用空格，括号里侧不加空格

#11、给定一个字符串，找出字符串第一个重复的字符
# def firstequalchar(string):
#     ident=True
#     for i in range(len(string)):
#         if ident:
#             for j in range(i+1,len(string)):
#                 if string[i]==string[j]:
#                     print(string[i])
#                     ident=False
#                     break
#         else:
#             break
# string='zhangjian'
# firstequalchar(string)

#12、简述深拷贝与浅拷贝
# 拷贝就是将原来的对象复制一个除内存地址不一样以外，其他一模一样的新对象出来，这个新对象独立与原来的对象存在
# 浅拷贝只会拷贝第一层的数据（地址），所以原来的的对象第一层的数据改变时，这个拷贝的对象不会受到影响，但更深层的数据改变时，这个拷贝出来的对象还是会跟着一起改变
# 而深拷贝则拷贝所有层的数据，这样所有层的数据都独立与原来的对象，不会受其影响

#13、简述python内存机制
# python的内存管理机制主要有三大块：引用计数、垃圾回收、内存池。垃圾回收是以引用计数为主，分代回收和标记清除为辅的内存回收方式

#14、使用python实现冒泡排序，快速排序
# def bubble_sort(lst):
# """冒泡排序"""
#
#     #外循环每循环一次，就在序列末尾产生一个最大值，循环结束即完成排序完成
#     for i in range(len(lst)):
#         #排除最大值，对剩下的序列继续冒泡排序
#         for j  in range(0,len(lst)-i-1):
#             if lst[j]>lst[j+1]:
#                 lst[j],lst[j+1]=lst[j+1],lst[j]
#     return lst
# print(bubble_sort([3,23,6,23,12,1]))

# def quick_sort(alist, start, end):
#     """快速排序"""
#
#     # 递归的退出条件
#     if start >= end:
#         return
#
#     # 设定起始元素为要寻找位置的基准元素
#     mid = alist[start]
#
#     # low为序列左边的由左向右移动的游标
#     low = start
#
#     # high为序列右边的由右向左移动的游标
#     high = end
#
#     while low < high:
#         # 如果low与high未重合，high指向的元素不比基准元素小，则high向左移动
#         while low < high and alist[high] >= mid:
#             high -= 1
#         # 将high指向的元素放到low的位置上
#         alist[low] = alist[high]
#
#         # 如果low与high未重合，low指向的元素比基准元素小，则low向右移动
#         while low < high and alist[low] < mid:
#             low += 1
#         # 将low指向的元素放到high的位置上
#         alist[high] = alist[low]
#
#     # 退出循环后，low与high重合，此时所指位置为基准元素的正确位置
#     # 将基准元素放到该位置
#     alist[low] = mid
#
#     # 对基准元素左边的子序列进行快速排序
#     quick_sort(alist, start, low-1)
#
#     # 对基准元素右边的子序列进行快速排序
#     quick_sort(alist, low+1, end)
#
#
# alist = [54,26,93,17,77,31,44,55,20]
# quick_sort(alist,0,len(alist)-1)
# print(alist)

#15、验证一个字符串是否属于回文（从左到右，从右到左都是一样）
# string='abbab'
# if string==string[::-1]:
#     print(string[::-1])
#     print("是回文")
# else:
#     print(string[::-1])
#     print("不是")

#16、ip解析
# import requests
# #解析ip返回省份和运营商信息
# def get_ipinfo(ip):
#     r = requests.get('https://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc&ip='+ip)
#     if r.json()['code']==0:
#         i=r.json()['data']
#         return ','+i['region']+','+i['isp']
#     else:
#         print(ip+'错误')
#
# import time
# with open('E:\三创\weblog.txt','r') as fp:
#     line = fp.readline()
#     # 一行一行读取文件内容，读到文末退出循环
#     while line!='':
#         #读取的每行字符串以空格分隔成列表
#         lst=line.split()
#         #自定义时间格式，并赋给变量result
#         result=time.strftime("%Y-%m-%d %H:%M:%S",time.strptime(lst[3], '[%d/%b/%Y:%H:%M:%S'))
#         #调用函数并返回值继续赋给result
#         result+=get_ipinfo(lst[0])+','+lst[9]
#         #将结果写入到指定文件中
#         with open('weblog_result.txt', 'a+') as fp2:
#             fp2.write(result+'\n')
#         line = fp.readline()